package imai78gae.heya.model;

import imai78gae.heya.util.DateUtil;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.IdentityType;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;
import javax.jdo.annotations.Version;
import javax.jdo.annotations.VersionStrategy;

import com.google.appengine.api.datastore.Key;

/**
 * グループを表わすモデルクラスです。
 * 
 * @author imai78
 *
 */
@Version(strategy = VersionStrategy.VERSION_NUMBER)
@PersistenceCapable(identityType = IdentityType.APPLICATION, detachable="true")
public class Group {

	/**
	 * グループを識別する為の{@link Key}です。
	 */
	@PrimaryKey
	@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
	private Key groupKey;
	/**
	 * ユーザが指定できるグループを識別する為のIDです。
	 */
	@Persistent
	private String groupId;
	/**
	 * グループ名です。
	 */
	@Persistent
	private String groupName;
	/**
	 * グループの説明です。
	 */
	@Persistent
	private String groupDescription;
	/**
	 * グループ所有者のログインIDです。
	 */
	@Persistent
	private String groupOwnerId;
	/**
	 * グループ所有者のユーザ名です。
	 */
	@Persistent
	private String groupOwnerName;
	/**
	 * 招待時の認証キーです。
	 */
	@Persistent
	private String inviteKey;
	/**
	 * グループが登録された日です。
	 */
	@Persistent
	private Date registered;
	/**
	 * このグループに投稿された{@link Message}のリストです。
	 */
	@Persistent(defaultFetchGroup = "true")
	/**
	 * このグループに参加するメンバーのログインIDのリストです。
	 */
	private List<Message> messages;
	@Persistent(defaultFetchGroup = "true")
	private List<String> memberLoginIdList;

	/**
	 * コンストラクタです。
	 */
	public Group() {
		this.messages = new ArrayList<Message>();
		this.memberLoginIdList = new ArrayList<String>();
		this.registered = DateUtil.getTodayDate();
	}
	/**
	 * 引数ありのコンストラクタです。
	 * 
	 * @param groupId グループID
	 * @param groupName グループ名
	 * @param groupDescription グループの説明
	 * @param groupOwnerId グループ所有者のログインID
	 * @param groupOwnerName グループ所有者のユーザ名
	 * @param inviteKey 認証キー
	 */
	public Group(String groupId, String groupName, String groupDescription,
			String inviteKey, String groupOwnerId, String groupOwnerName) {
		this();
		this.groupId = groupId;
		this.groupName = groupName;
		this.groupDescription = groupDescription;
		this.groupOwnerId = groupOwnerId;
		this.groupOwnerName = groupOwnerName;
		this.inviteKey = inviteKey;
		this.memberLoginIdList.add(groupOwnerId);
	}

	public Key getGroupKey() {
		return groupKey;
	}
	public void setGroupKey(Key groupKey) {
		this.groupKey = groupKey;
	}
	public String getGroupId() {
		return groupId;
	}
	public void setGroupId(String groupId) {
		this.groupId = groupId;
	}
	public String getGroupName() {
		return groupName;
	}
	public void setGroupName(String groupName) {
		this.groupName = groupName;
	}
	public String getGroupDescription() {
		return groupDescription;
	}
	public void setGroupDescription(String groupDescription) {
		this.groupDescription = groupDescription;
	}
	public String getGroupOwnerId() {
		return groupOwnerId;
	}
	public void setGroupOwnerId(String groupOwnerId) {
		this.groupOwnerId = groupOwnerId;
	}
	public String getGroupOwnerName() {
		return groupOwnerName;
	}
	public void setGroupOwnerName(String groupOwnerName) {
		this.groupOwnerName = groupOwnerName;
	}
	public String getInviteKey() {
		return inviteKey;
	}
	public void setInviteKey(String inviteKey) {
		this.inviteKey = inviteKey;
	}
	public Date getRegistered() {
		return registered;
	}
	public void setRegistered(Date registered) {
		this.registered = registered;
	}
	public List<Message> getMessages() {
		return messages;
	}
	public void setMessages(List<Message> messages) {
		this.messages = messages;
	}
	public List<String> getMemberLoginIdList() {
		return memberLoginIdList;
	}
	public void setMemberLoginIdList(List<String> memberLoginIdList) {
		this.memberLoginIdList = memberLoginIdList;
	}

}
